fix: off-by-1 in getBlockHashMembershipWitness archive snapshot#21648
Merged
benesjan merged 1 commit intomerge-train/fairiesfrom Mar 17, 2026
Merged
fix: off-by-1 in getBlockHashMembershipWitness archive snapshot#21648benesjan merged 1 commit intomerge-train/fairiesfrom
benesjan merged 1 commit intomerge-train/fairiesfrom
Conversation
benesjan
commented
Mar 17, 2026
| get_block_header_at_oracle(block_number) | ||
| } | ||
|
|
||
| pub fn get_block_header_at(block_number: u32, context: PrivateContext) -> BlockHeader { |
Contributor
Author
There was a problem hiding this comment.
Shall we make this function be pub(crate) and force devs to use it via the private context where it's exposed?
The Noir circuit checks archive membership against `anchor_block_header.last_archive.root`, which is the archive tree root BEFORE the anchor block was added (state after block N-1). The node was returning a sibling path from the archive at block N, causing the proof to fail. Fix by resolving the reference block number and fetching world state at block N-1 instead. Also adds comprehensive tests for get_block_header_at covering past blocks, anchor block, future block rejection, and block number mismatch. Closes #21635 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Collaborator
|
❌ Failed to cherry-pick to |
benesjan
pushed a commit
that referenced
this pull request
Mar 17, 2026
alexghr
added a commit
that referenced
this pull request
Mar 17, 2026
BEGIN_COMMIT_OVERRIDE fix(aztec-nr): return Option from decode functions and fix event commitment capacity (backport #21264) (#21360) fix: backport #21271 — handle bad note lengths on compute_note_hash_and_nullifier (#21364) fix: not reusing tags of partially reverted txs (#20817) chore: revert accidental backport of #20817 (#21583) feat: Implement commit all and revert all for world state checkpoints (#21532) cherry-pick: fix: dependabot alerts (#21531) fix: dependabot alerts (backport #21531 to v4) (#21592) fix: backport #21443 — Don't update state if we failed to execute sufficient transactions (v4) (#21610) chore: Fix msgpack serialisation (#21612) fix(p2p): fall back to maxTxsPerCheckpoint for per-block tx validation (#21605) chore: merge v4 into backport-to-v4-staging (#21618) fix(revert): avm sim uses event loop again (#21138) (#21630) fix(e2e): remove historic/finalized block checks from epochs_multiple test (#21642) fix: clamp finalized block to oldest available in world-state (#21643) fix: skip handleChainFinalized when block is behind oldest available (#21656) chore: demote finalized block skip log to trace (#21661) fix: off-by-1 in getBlockHashMembershipWitness archive snapshot (backport #21648) (#21663) fix: capture txs not available error reason in proposal handler (#21670) chore: add L1 inclusion time to stg public (#21665) END_COMMIT_OVERRIDE --------- Co-authored-by: Jan Beneš <janbenes1234@gmail.com> Co-authored-by: PhilWindle <60546371+PhilWindle@users.noreply.github.com> Co-authored-by: Phil Windle <philip.windle@gmail.com> Co-authored-by: Santiago Palladino <santiago@aztecprotocol.com> Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com> Co-authored-by: ludamad <adam.domurad@gmail.com> Co-authored-by: Alex Gherghisan <alexghr@users.noreply.github.com>
github-merge-queue bot
pushed a commit
that referenced
this pull request
Mar 17, 2026
BEGIN_COMMIT_OVERRIDE feat: entrypoint replay protection (#21649) feat: guard BoundedVec oracle returns against dirty trailing storage (#21589) feat: implement manual Packable for structs with sub-Field members (#21576) fix: off-by-1 in getBlockHashMembershipWitness archive snapshot (#21648) END_COMMIT_OVERRIDE
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
AztecNodeService.getBlockHashMembershipWitness: the Noir circuit checks archive membership againstanchor_block_header.last_archive.root(the archive at block N-1), but the node was returning a sibling path from the archive at block N. Fixed by fetching world state atreferenceBlock - 1.get_block_header_atcovering: past blocks, earliest block, boundary block (N-1), anchor block (early return path), future block rejection, and block number mismatch.Fixes #21635
Fixes F-464
Test plan
stdlibaztec-node interface tests pass (62/62)🤖 Generated with Claude Code